home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
source
/
swagg-m
/
misc.swg
/
0027_Fast Anagrams.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-08-27
|
3KB
|
113 lines
{$A+,B+,D+,E-,F+,G+,I+,L+,N-,O+,P+,Q+,R+,S+,T+,V-,X+,Y+}
{$M 65520,100000,655360}
{
Copyright 1993 Mark Ouellet. All rights reserved.
May be freely distributed and incorporated in your own code, in part
or in it's entirety as long as due credit is given to it's author
All I ask is that you state my name if you use ALL or PART of it in
your own code.
}
Program FastAnagrams;
Uses
Crt;
Type
StrPointer = ^String;
NodePtr = ^Node;
Node = Record
Anagram : StrPointer;
Next : NodePtr;
end;
Var
OldAnagrams : NodePtr;
NewAnagrams : NodePtr;
OldCursor : NodePtr;
NewCursor : NodePtr;
InputStr : String;
Procedure GetInput;
begin
ClrScr;
Write('Input your String: ');
readln(InputStr);
end;
Procedure FindAnagrams;
Var
OldIndex : Word;
NewIndex : Word;
begin
OldAnagrams := NIL;
OldCursor := NIL;
NewAnagrams := NIL;
NewCursor := NIL;
New(OldCursor);
OldCursor^.Next := OldAnagrams;
GetMem(OldCursor^.Anagram, 2);
OldCursor^.Anagram^ := Copy(InputStr, 1, 1);
OldAnagrams := OldCursor;
For OldIndex := 2 to Ord(InputStr[0]) do
begin
OldCursor := OldAnagrams;
While OldCursor <> NIL do
begin
For NewIndex := 1 to Ord(OldCursor^.Anagram^[0])+1 do
begin
New(NewCursor);
NewCursor^.Next := NewAnagrams;
getmem(NewCursor^.Anagram, sizeof(OldCursor^.Anagram^)+1);
NewCursor^.Anagram^ := OldCursor^.Anagram^;
Insert(Copy(InputStr, OldIndex, 1),
NewCursor^.Anagram^, NewIndex);
NewAnagrams := NewCursor;
end;
OldCursor := OldCursor^.Next;
FreeMem(OldAnagrams^.Anagram, Ord(OldAnagrams^.Anagram^[0])+1);
OldAnagrams^.Anagram := nil;
Dispose(OldAnagrams);
OldAnagrams := OldCursor;
end;
OldAnagrams := NewAnagrams;
OldCursor := OldAnagrams;
NewAnagrams := NIL;
NewCursor := NIL;
end;
end;
Procedure OutputAnagrams;
Var
Count : Word;
begin
Count := 0;
OldCursor := OldAnagrams;
While OldCursor <> NIL do
begin
OldCursor := OldCursor^.Next;
Writeln(OldAnagrams^.Anagram^);
FreeMem(OldAnagrams^.Anagram, sizeof(OldAnagrams^.Anagram^));
dispose(OldAnagrams);
OldAnagrams := OldCursor;
Inc(Count);
end;
Writeln;
Writeln(Count, ' Anagrams found.');
end;
begin
GetInput;
Writeln;
Writeln(MaxAvail, ' Available memory.');
Writeln;
FindAnagrams;
OutputAnagrams;
end.